{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "import sys\n",
    "sys.path.append(\"../\") # go to parent dir to allow imports\n",
    "\n",
    "from models import mnist_model\n",
    "from tensorflow.examples.tutorials.mnist import input_data\n",
    "\n",
    "import tensorflow as tf\n",
    "import numpy as np\n",
    "from numpy.random import uniform\n",
    "\n",
    "import matplotlib\n",
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "import imageio"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The autoreload extension is already loaded. To reload it, use:\n",
      "  %reload_ext autoreload\n"
     ]
    }
   ],
   "source": [
    "%load_ext autoreload\n",
    "%autoreload 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Extracting ../data/MNIST-data/train-images-idx3-ubyte.gz\n",
      "Extracting ../data/MNIST-data/train-labels-idx1-ubyte.gz\n",
      "Extracting ../data/MNIST-data/t10k-images-idx3-ubyte.gz\n",
      "Extracting ../data/MNIST-data/t10k-labels-idx1-ubyte.gz\n"
     ]
    }
   ],
   "source": [
    "ticks = [str(x) for x in range(10)]\n",
    "\n",
    "def show(img):\n",
    "    \"\"\"Displays single mnist digit\"\"\"\n",
    "    plt.imshow(img.reshape([28, 28]), cmap=\"gray\")\n",
    "    plt.show()\n",
    "    \n",
    "def show_with_var(img, prob, var):\n",
    "    \"\"\"Display single mnist digit next to the variance per class\"\"\"\n",
    "    fig, axs = plt.subplots(1, 3, figsize=(10,5))\n",
    "    axs[0].imshow(img.reshape([28, 28]))\n",
    "    axs[1].bar(ticks, prob)\n",
    "    axs[2].bar(ticks, var)\n",
    "    plt.show()\n",
    "    \n",
    "def save_img(path, img):\n",
    "    imageio.imsave(path, img.reshape([28, 28]))\n",
    "        \n",
    "mnist = input_data.read_data_sets(\"../data/MNIST-data\", one_hot=True)\n",
    "adv_img = imageio.imread(\"adv_img.png\").reshape(784)\n",
    "img = imageio.imread(\"img.png\").reshape(784)\n",
    "random_img = uniform(size=784)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Crafting Adversarial Examples\n",
    "\n",
    "The adversarial image is created by projected gradient descent with the pretrained dropout model with no MC Dropout. (http://www.anishathalye.com/2017/07/25/synthesizing-adversarial-examples/)\n",
    "\n",
    "The used model is the dropout model, but adversarial images transfer and fool the other models too"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [],
   "source": [
    "def modify_to(img, target, steps=10000):\n",
    "    tf.reset_default_graph()\n",
    "    dropout_rate=0.0\n",
    "    learning_rate=0.001\n",
    "\n",
    "    x_hat = tf.Variable(tf.zeros((784))) # trainable image\n",
    "    x = tf.placeholder(tf.float32, 784) # the image will be fed into this placeholder\n",
    "    dropout_rate = tf.placeholder(tf.float32)\n",
    "\n",
    "    assign_op = tf.assign(x_hat, x)  # x_hat <- x\n",
    "\n",
    "    logits, probs = mnist_model.dropout_cnn_mnist_model(x_hat, dropout_rate, reuse=False)\n",
    "\n",
    "    y_hat = tf.placeholder(tf.int32, ())\n",
    "    labels = tf.one_hot(y_hat, 10)\n",
    "    loss = tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=[labels])\n",
    "\n",
    "    optim_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss, var_list=[x_hat])\n",
    "    #optim_step = tf.train.AdamOptimizer(learning_rate).minimize(loss, var_list=[x_hat])\n",
    "    epsilon = tf.placeholder(tf.float32, ())\n",
    "\n",
    "    below = x - epsilon\n",
    "    above = x + epsilon\n",
    "    projected = tf.clip_by_value(tf.clip_by_value(x_hat, below, above), 0, 1)\n",
    "    with tf.control_dependencies([projected]):\n",
    "        project_step = tf.assign(x_hat, projected)\n",
    "\n",
    "    init = tf.global_variables_initializer()\n",
    "    sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))\n",
    "    sess.run(init)\n",
    "\n",
    "    # Initialize all variables and restore trained weights\n",
    "    variable_list = tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, scope=\"mnist\")[:8]\n",
    "    saver = tf.train.Saver(var_list=variable_list)\n",
    "    saver.restore(sess, \"mnist_dropout.ckpt\")\n",
    "    \n",
    "    print(\"Modifying image to {}\".format(target))\n",
    "    demo_epsilon = 0.3\n",
    "    demo_target = target\n",
    "    demo_steps = steps\n",
    "\n",
    "    sess.run(assign_op, feed_dict={x: img})\n",
    "\n",
    "    for i in range(demo_steps):\n",
    "        # gradient descent step\n",
    "        _, loss_value = sess.run(\n",
    "            [optim_step, loss],\n",
    "            feed_dict={dropout_rate: 0, y_hat: demo_target})\n",
    "        # project step\n",
    "        sess.run(project_step, feed_dict={x: img, epsilon: demo_epsilon})\n",
    "        if (i+1) % 2500 == 0:\n",
    "            print('step %d, loss=%g' % (i+1, loss_value))\n",
    "            #print(np.argmax(sess.run(probs, feed_dict={dropout_rate: 0.4})[0]))\n",
    "\n",
    "    adv_img = sess.run(x_hat)\n",
    "\n",
    "    show(adv_img)\n",
    "    #show(adv_img - img)\n",
    "    return adv_img"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 153,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n+EkgAM0AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f43701e3ed0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO:tensorflow:Restoring parameters from mnist_dropout.ckpt\n",
      "Modifying image to 5\n",
      "step 2500, loss=0.150976\n",
      "step 5000, loss=0.0912105\n",
      "step 7500, loss=0.0683666\n",
      "step 10000, loss=0.055474\n",
      "step 12500, loss=0.0469255\n",
      "step 15000, loss=0.0416678\n",
      "step 17500, loss=0.0377346\n",
      "step 20000, loss=0.034337\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nub9Sw1nKeSgPPPCAGfdKWu3t7akxr5SXtRz2+eefp8bKvTW9t2R6FlmmAw/mJr+qbgWQ9gh/r+B7\nIqKqwhF+REEx+YmCYvITBcXkJwqKyU8UFJOfKKiKLt0tImaN0tvW2KrzT5482WzrLUFtjT8A7Kmx\nXj3aW2La67tXu50/f74Zt9x0001mfNq0aWb8rrvuMuPeebfs27cv07GtsR9eHd6bCu219x7zLKwl\nyblFNxG5mPxEQTH5iYJi8hMFxeQnCorJTxQUk58oqIrW+T1ePduqvU6cONFs29jYaMa99n+tvDr9\nvHnzzPjWrVvN+Jtvvll0W2/rcqveDdhz9r11CLwtvL3t5LPU+b3fazhz9i288hMFxeQnCorJTxQU\nk58oKCY/UVBMfqKgmPxEQVW0zt/f34+zZ8+mxi9cuGC2t+ZQe/OYvbrrrFmzzLg1r93bM6CazZkz\nx4zv2LHDjK9evdqMf/HFF6kxr47v8ebcW3X+3t7eTPftjRPIsl6A91y1xhgMZz8CXvmJgmLyEwXF\n5CcKislPFBSTnygoJj9RUEx+oqDcArWIzATwBoCpABTAGlV9RUReAPBjAMeSH31eVd/xjmet2+/N\nobZ0dnYW3RbItr58uS1YsMCMNzU1FX3szZs3m3Fv/IP3mHl7GlgaGhqKbgsAPT09qTGvTu/x5tR7\n9XarVu+NEfDWEihUIaNT+gD8TFV3ikg9gB0isiWJvayq/1qSnhBRRbnJr6pHABxJvu4Skc8AzCh3\nx4iovIb1nl9EZgP4DoBtyU1Pi8jHIrJWRCaltGkRke0isj1TT4mopApOfhEZD+APAH6qqmcAvAbg\nOgALMPDK4OdDtVPVNararKrNJegvEZVIQckvInUYSPzfqOrbAKCqHap6SVX7AfwSwMLydZOISs1N\nfhn4WPRXAD5T1V8Mun36oB/7EYBPSt89IioX8UoSInI7gD8B2APgco3heQCPYOAlvwJoA/CT5MNB\n61hqlViGMx2R/p+1xfeJEyfMtt6S5U899ZQZX7VqlRm3eFNy6+rqij42AHR1daXGvGnYVkka8Mtx\nXgnUeq57bb0cUtWC6piFfNq/FcBQB3Nr+kRUvTjCjygoJj9RUEx+oqCY/ERBMfmJgmLyEwXl1vlL\nemci5p15WxNbSxpHHiOQZRnoUm33XAxvWm19fb0Z9+rh1u/m/d5e37y493y0+p7l2MOp8/PKTxQU\nk58oKCY/UVBMfqKgmPxEQTH5iYJi8hMFVek6/zEABwfd1Ajgq4p1YHiqtW/V2i+AfStWKfs2S1Wv\nLuQHK5r837pzke3VurZftfatWvsFsG/FyqtvfNlPFBSTnyiovJN/Tc73b6nWvlVrvwD2rVi59C3X\n9/xElJ+8r/xElJNckl9E7haRL0Rkv4g8l0cf0ohIm4jsEZFdeW8xlmyD1ikinwy6bbKIbBGRfcn/\nQ26TllPfXhCR9uTc7RKRe3Lq20wR+W8R2Ssin4rIPya353rujH7lct4q/rJfRGoB/A+A7wM4DOAj\nAI+o6t6KdiSFiLQBaFbV3GvCInIngG4Ab6jq/OS2lwCcUNUXkz+ck1T1n6qkby8A6M575+ZkQ5np\ng3eWBnA/gH9AjufO6NdDyOG85XHlXwhgv6oeUNVeAL8DsDSHflQ9Vf0AwDd33VgKYF3y9ToMPHkq\nLqVvVUFVj6jqzuTrLgCXd5bO9dwZ/cpFHsk/A8ChQd8fRnVt+a0A/igiO0SkJe/ODGHqoJ2RjgKY\nmmdnhuDu3FxJ39hZumrOXTE7XpcaP/D7tttV9VYAPwTwVPLytirpwHu2airXFLRzc6UMsbP0X+R5\n7ord8brU8kj+dgAzB33flNxWFVS1Pfm/E8BGVN/uwx2XN0lN/u/MuT9/UU07Nw+1szSq4NxV047X\neST/RwDmisi1IjISwDIArTn041tEZFzyQQxEZByAH6D6dh9uBbAi+XoFgE059uVrqmXn5rSdpZHz\nuau6Ha+T1T4r+g/APRj4xP9/AfxzHn1I6dccALuTf5/m3TcAGzDwMvAiBj4beRxAA4B3AewD8F8A\nJldR39ZjYDfnjzGQaNNz6tvtGHhJ/zGAXcm/e/I+d0a/cjlvHOFHFBQ/8CMKislPFBSTnygoJj9R\nUEx+oqCY/ERBMfmJgmLyEwX1f/E/YAf7jJkKAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f437cc87910>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x_test = mnist.test.images\n",
    "img = x_test[12]  # example image to be modified \n",
    "show(img)\n",
    "adv_img = modify_to(img, 5, steps=20000)\n",
    "imageio.imsave(\"adv_img.png\", adv_img.reshape([28, 28]))\n",
    "imageio.imsave(\"img.png\", img.reshape([28, 28]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Adversarial Standard Network"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 156,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\ny97ad3818KzZrkuSuqiqdc2/65N8mt6ouF+aEHMucC5AEr90knZRXUaPPK1lfQFvGFpFkiRJO7kk\newLzquq+5v5PA2+f47Ikjagu87RJkiRpuA4CPt3MU7YA+ERVfXZuS5I0qmzaJEmSZllV3QT82LDz\nLlq0qDVmWJMTj5O99tqrNWbr1q2tMV0mZO7i4osvnnaOLpM233777dN+np3Vvvvu2xrTNgn6bI6G\nP6tD/kuSJEmSdoxNmyRJkiSNMJs2SZIkSRphNm2SJEmSNMJs2iRJkiRphNm0SZIkSdIIs2mTJEmS\npBFm0yZJkiRJI8zJtSVJknYS8+fPb43Ztm3bwPUHHHBAa46777572s8DUFWtMcPQZSLqLtuuiyOO\nOKI15pxzzhm4ftmyZa055s1rP/bS5T343Oc+1xrz3ve+tzWmzdKlS1tj1q1b1xrzkpe8pDXme9/7\nXmvMTTfd1BqTZOD6JUuWtOa45ZZbWmO68EibJEmSJI0wmzZJkiRJGmE2bZIkSZI0wmzaJEmSJGmE\n2bRJkiRJ0gizaZMkSZKkEWbTJkmSJEkjzKZNkiRJkkaYk2tLkiSNibbJfh944IFp5+jiwAMPbI3p\nMqF1l3oXLVrUGrNgweCPtN/97ndbcxx77LGtMc997nNbY1asWNEa0zax81FHHdWaY1iTgZ988smt\nMX/wB3/QGtNlUvY2F110UWvMRz/60daYJzzhCUOJ+epXvzpw/R577NGaY+HChQPXP/zww605wCNt\nkiRJkjTSbNokSZIkaYTZtEmSJEnSCLNpkyRJkqQRZtMmSZIkSSPMpk2SJEmSRphNmyRJkiSNMOdp\nkyRJGgNJ2G233QbGbN26tTXPnnvuOXD9gw8+2Jqjy5xcd9xxR2vM3nvv3Rpz3333tcYMw5e//OXW\nmE996lOtMVu2bGmNWbx48cD173znO1tzbN68uTVm3333bY058sgjW2O6zLl36qmntsa0ue2226ad\no6u2ufIANm3aNHD9Qw891Jqj7W/l+9//fmsO8EibJEmSJI00mzZJkiRJGmE2bZIkSZI0wmzaJEmS\nJGmE2bRJkiRJ0gizaZMkSZKkEdapaUtyYpIbk6xJcuYk6w9N8sUkX0lyXZIXD79USZIkSdr1tDZt\nSeYD5wAvAo4GTkty9ISw3wcuqqpjgVOB9w27UEmSJEnaFXWZXPt4YE1V3QSQ5ELgFGB1X0wB+zT3\n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\nd3Suaboeeuih1pguv1dtE00/7nGPa83RZfL4YUyK3VVbPV0m8R5WLR5pkyRJkqQRZtMmSZIkSSPM\npk2SJEmSRphNmyRJkiSNMJs2SZIkSRphNm2SJEmSNMJs2iRJkiRphNm0SZIkSdIIc3JtSZKk8fB9\n4Ja+x4ubZT+wefPmWS1oBz2q3hH3qHo3bdo0R6V08pi2b5fJn++9997HUk+bsf99GNLE2Yd1CbJp\nkyRJGgNVtaT/cZJVVbV8rurZUdY7s6x3Zs11vZ4eKUmSJEkjzKZNkiRJkkaYTZskSdJ4OneuC9hB\n1juzrHdmzWm9Nm2SJEljqKrG6kOv9c4s651Zc12vTZskSZIkjTCbNkmSpDGT5MQkNyZZk+TMua6n\nTZKbk3wtybVJVs11PRMlOS/J+iRf71t2QJLPJflW8+/+c1ljvynqfVuSdc02vjbJi+eyxn5JDkny\nxSSrk1yf5E3N8pHcxgPqnbNt7JD/kiRp1hx+5j8MLdfNZ580tFzjJMl84BzghcBa4KokK6tq9dxW\n1uqnqmpU5+U6H3gv8JG+ZWcCn6+qs5vG+Ezgd+egtsmcz6PrBXhPVb179stptQV4c1Vdk2Rv4Ook\nnwNezWhu46nqhTnaxp2OtLV9m5PkcUn+v2b9lUkOH3ahkjSR+yZJu6jjgTVVdVNVbQYuBE6Z45rG\nWlV9CbhzwuJTgA839z8MvHRWixpginpHVlXdVlXXNPfvA24AljKi23hAvXOmtWnr+zbnRcDRwGlJ\njp4Q9lrgrqp6MvAe4I+HXagk9XPfJGkXthS4te/xWub4A2UHBfxTkquTrJjrYjo6qKpua+5/Dzho\nLovp6Iwk1zWnT47EqYYTNV+gHgtcyRhs4wn1whxt4y6nR/7g2xyAJNu/zek/BH8K8Lbm/ieB9yZJ\nVdUQa5Wkfu6bpBniKYyaAc+uqnVJHg98Lsk3mqNFY6GqKsmo/9/xfuAP6TXIfwj8KfDf5rSiCZLs\nBfwt8BtVdW+SH6wbxW08Sb1zto27NG2TfZvzjKliqmpLknuAA4FRPW9Z0vhz3zSCZvLD/rByz3YT\nMZN1j+s20bStAw7pe7ysWTayqmpd8+/6JJ+m98XbqDdttyc5uKpuS3IwsH6uCxqkqm7ffj/JXwIX\nz2E5j5JkN3oN0Mer6lPN4pHdxpPVO5fbeFYHImkOh28/JH5/khuH/BSLmZkPYzOV19yPMXce+0lu\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f43fd49dc90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Needs to have the Dropout model loaded\n",
    "dropout_inference(adv_img, dropout=0.)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Adversarial Dropout Network"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 154,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO:tensorflow:Restoring parameters from mnist_dropout.ckpt\n"
     ]
    }
   ],
   "source": [
    "tf.reset_default_graph()\n",
    "\n",
    "#x_hat = tf.Variable(tf.zeros((784))) # trainable image\n",
    "x_data = tf.placeholder(tf.float32, 784) # the image will be fed into this placeholder\n",
    "dropout_rate_data = tf.placeholder(tf.float32)\n",
    "n_passes = 50\n",
    "\n",
    "logits, class_prob = mnist_model.dropout_cnn_mnist_model(x_data, dropout_rate_data)\n",
    "\n",
    "init = tf.global_variables_initializer()\n",
    "sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))\n",
    "sess.run(init)\n",
    "\n",
    "variable_list = tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, scope=\"mnist\")[:8]\n",
    "saver = tf.train.Saver(var_list=variable_list)\n",
    "saver.restore(sess, \"mnist_dropout.ckpt\")\n",
    "\n",
    "def dropout_inference(img, dropout=0.5):\n",
    "    y = []\n",
    "    for i in range(n_passes):\n",
    "        y.append(sess.run(class_prob, feed_dict={x_data: img, dropout_rate_data: dropout})[0])\n",
    "\n",
    "    fig, axs = plt.subplots(1, 3, figsize=[15, 5])\n",
    "    fig.suptitle(\"Adversarial Attack in Dropout Network\", fontsize=14)\n",
    "    axs[0].bar(ticks, np.array(y).var(axis=0))\n",
    "    axs[0].set_title(\"Var\")\n",
    "    axs[1].bar(ticks, np.array(y).mean(axis=0))\n",
    "    axs[1].set_title(\"Mean\")\n",
    "    axs[2].imshow(img.reshape(28, 28), cmap=\"gray\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 155,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nU8EOcgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f43fd4a24d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "dropout_inference(adv_img, dropout=0.5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Adversarial Bootstrap Network"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 157,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO:tensorflow:Restoring parameters from mnist_boostrap.ckpt\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n+AeItVR50/NujQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f43fe096fd0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "tf.reset_default_graph()\n",
    "\n",
    "#x_hat = tf.Variable(tf.zeros((784))) # trainable image\n",
    "x_data = tf.placeholder(tf.float32, 784) # the image will be fed into this placeholder\n",
    "dropout_rate = tf.placeholder(tf.float32)\n",
    "\n",
    "heads = mnist_model.bootstrap_cnn_mnist_model(x_data, dropout_rate)\n",
    "\n",
    "init = tf.global_variables_initializer()\n",
    "sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))\n",
    "sess.run(init)\n",
    "\n",
    "variable_list = tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, scope=\"mnist\")[:16]\n",
    "saver = tf.train.Saver(var_list=variable_list)\n",
    "saver.restore(sess, \"mnist_boostrap.ckpt\")\n",
    "\n",
    "def bootstrap_inference(img):\n",
    "    ys = []\n",
    "    for i, head in enumerate(heads):\n",
    "        logits, class_prob = head\n",
    "        y = sess.run(class_prob, feed_dict={x_data: img, dropout_rate: 0.0})[0]\n",
    "        ys.append(y)\n",
    "    \n",
    "    fig, axs = plt.subplots(1, 3, figsize=[15, 5])\n",
    "    fig.suptitle(\"Adversarial Attack in Bootstrap Network\", fontsize=14)\n",
    "    axs[0].bar(ticks, np.array(ys).var(axis=0))\n",
    "    axs[0].set_title(\"Var\")\n",
    "    axs[1].bar(ticks, np.array(ys).mean(axis=0))\n",
    "    axs[1].set_title(\"Mean\")\n",
    "    axs[2].imshow(img.reshape(28, 28), cmap=\"gray\")\n",
    "    \n",
    "bootstrap_inference(adv_img)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Adversarial Combined Network"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 160,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO:tensorflow:Restoring parameters from mnist_combined.ckpt\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n3qbp7msv+PrbNL72mnWNSHN6e8W83nr//3pTPfPciG5sEcVvOCdk2/qlbG7cLcB1EfGT7iw7G+p2\nN3BMk4t6G3BcNk/uBuCdkq5tcpmt39gTEUuAW2n+/dAXAgtzvUs3kz7UdYf3AA9FxOJuKOso4JmI\nWBoRG4GfAG/thnKJiMsj4o0RcRiwgjQvyrrOgLn++trbPD1w7QVff5vK117rRfra/6nF2Tzk1vnI\nS3q4Pu39/+t19SxzI7qxmcA+kiZl3+5OBab3cJ2aIlto5nLg8Yj4VjeVubOk0dnj4aSFGZ5oZpkR\n8cWImBARE0nv510R0dRvziWNzBZMIBvS9y7SkLSmiYjngQWS9s02HQl010IXJ9ENQwkzzwKHSBqR\nncNHkubUNJ2kXbLfe5Lm5P2oO8odQAbE9dfX3ubpiWsv+Prb7EJ97bVepK/9n5oOnJY9Pg34WQ/W\npd7/v15Vz1oG93QFeruI2CTpbOAOoAW4IiIea3a5kq4HjgDGSVoInBcRlze52LcBpwB/zObJAXwp\nImY0sczdgauy1Q0HATdGRLfc9qSb7Qrcmq4VDAZ+FBG/6IZyPwFcl13YnwY+2uwCsw+qRwP/0Oyy\nACLiQUk3Aw8Bm4A/AJd2R9nALZLGAhuBs7p54aB+ryeuv7729js9de0FX3+bydde6xV6qp1QRa3/\nZ8A04EZJZwDzgRN6roZAO///6H31bMO3uDIzMzMzMzOryMO5zczMzMzMzCpyI9rMzMzMzMysIjei\nzczMzMzMzCpyI9rMzMzMzMysIjeizczMzMzMzCpyI9rMzMzMzMysIjeizczMzMzMzCpyI9rMzMzM\nzMysIjeizczMzMzMzCpyI9rMzMzMzMysIjeizczMzMzMzCpyI9rMzMzMzMysIjeibUCS9CVJl/V0\nPTpL0mpJr+zpepiZNUtfv06bmVn/5Ua0dZqkkLR3adv5kq7tgbrcI+nvq6aPiK9FRKX02/KcJH1P\n0tU1tr9O0npJO3Um34jYPiKe7syxZjZw+DrdobqFpNeVtt+abT+is3mbmVn/40a09WlKevN5fBXw\nt5JGlrafAtwWEcs7kpmkwV1WMzOzbtAHrtOt/hc4tTWQNBZ4C7C0x2pkZma9Ul/4p2Z9lKQjJC2U\n9DlJSyQ9J+mjuf3DJf2HpPmSXpR0n6Th2b5DJP1O0kpJj+R7AbIegwsl/Q+wFrgGOBT4TjbM+TtZ\num9LWiDpJUmzJR2ay2Nrr4WkiVlPw2mSnpX0gqR/yfYdA3wJODHL+xFJH5I0u/RcPyvpZ+XXICLu\nBxYBH8ilbQE+DFydxQdLuj97rs9J+o6kIbn0IeksSU8BT+W27Z09PlbSH7LnuUDS+blj231urXXJ\nhkz+WdKq7HXaI9v3Gkl3Slou6UlJJ1R4282sD/F1uuC6LI+WLD4JuBXYkMtjkKRzsmvmMkk3Kjei\nSNJNkp7PXqt7Je2f23elpEsk3Z5dbx+U9Koq75OZmfUubkRbs+0G7AiMB84ALpE0Jtv3TeCNwFuB\nnYB/BrZIGg/cDnw12/554BZJO+fyPQU4ExgFnA78Fjg7G+Z8dpZmJnBQlsePgJskDatT17cD+wJH\nAudKem1E/AL4GvDjLO/XAdOBSZJeW6pPm2HbmavJ9W4ARwHbATOyeDPwGWAcqdfjSOAfS3kcD7wZ\n2K9G/muy/EcDxwIfl3R8o+eWbf8s6YPie4EdgL8D1ir1nN9Jet12AaYC/yWpVvlm1rf5Op38BZgD\nvCuLT62R/hOk6/HhwCuAFcAluf0/B/YhXTcfIjXM86YCXwbGAHOBC+vUx8zMeik3oq3ZNgIXRMTG\niJgBrAb2VRra93fApyJiUURsjojfRcR64GRgRkTMiIgtEXEnMIvU0Gt1ZUQ8FhGbImJjrYIj4tqI\nWJal+Q9gKOnDV3u+HBEvR8QjwCPA62olyur446yeZD0NE4Hb2sn3GuBwSROy+FTgR631jojZEfFA\nVs95wPdJH9Dyvh4RyyPi5Rr1uSci/pi9Vo8C19c4vr3n9vfAv0bEk5E8EhHLgPcB8yLih1m9/gDc\nAnyonedoZn2Xr9N/dTVwqqTXAKOz0UR5HwP+JSIWZmWcD3xQ2VSbiLgiIlbl9r1O0o6542+NiN9H\nxCZSA/ugBvUxM7NeyI1o2xabST2qeduRPpC1WpZ9WGi1Ftie1Os6DPhzjXz3Aj6UDRFcKWklqfdh\n91yaBY0qJ+nzkh7PhtWtJPW0jKtzyPM16tmeq4APSxKpd+PG7ENTGxHxLHAvcLKk7Um9GFt7NyS9\nWtJt2RDAl0g9KuV6tvt8Jb1Z0t2Slkp6kfQhr3x8e89tD9p/D95ceg8+QuqxMrO+w9fpCtfpnJ8A\n7wTOJn0BWrYXcGvuOT9Oeo13VZoeMy0b6v0SMC87Jv98OlJ/MzPrpdyItm3xLOmb/bxJwPwKx74A\nrANqzQdbAFwTEaNzPyMjYlouTZSOKcTZvLp/Bk4AxkTEaOBFQBXqVlYui4h4gDRP7lDS/OZaH7by\nriJ9iPsA8ExE5OfqfRd4AtgnInYgze0r17NNHXJ+RBq6uEdE7Ah8r8bx7VlA++/Bb0rvwfYR8fGK\n+ZpZ7+DrdPXrNBGxljQk++PtpF8AvKf0vIdFxKKsjCmkKTs78tfXvTPPx8zMejE3om1b/Bj4V0kT\nssVWjgLeD9zc6MCI2AJcAXxL0iuyb/DfImkocC3wfknvzrYPU1r8ZkKdLBcD+fsmjwI2kVZVHSzp\nXNKc385YDExU29Vlrwa+A2yMiPsa5HELsCdpLtxVpX2jgJeA1dkQwo42VEcByyNinaSDSR/kqroM\n+IqkfZT8H6UVaW8DXi3pFEnbZT9vKs0vNLPez9fp6tfpVl8CDs+m15R9D7hQ0l4AknaWNCXbNwpY\nDywDRpBGFZmZWT/kRrRtiwuA3wH3kRZX+QbwkYj4U8XjPw/8kbSwzHLgImBQRCwgfZv/JdKHqwXA\nP1H/fP02aV7aCkn/D7gD+AXpliXzSb0pDYcWtuOm7PcySQ/ltl8DHED6MFlXRKwhNaQn0Hahmc+T\nGr6rgB+QPvR2xD8CF0haBZwL3NiBY7+Vpf8lqSF/OTA8IlaRFteZSlps53nS+zO0g3Uzs57l63TF\n63SriPhLnQb3t0kjf36ZXXMfIC36CKnBPp90R4Y52T4zM+uHFFFvlKiZtUfpNi9LgDdExFM9XR8z\nMyvyddrMzJrBPdFmnfdxYKY/mJmZ9Vq+TpuZWZcb3NMVMOuLJM0jLRZTvh+zmZn1Ar5Om5lZs3g4\nt5mZmZmZmVlFHs5tZmZmZmYGSDpG0pOS5ko6p6frY71Tv+iJHjduXEycOLGnq2Fm1jSzZ89+ISJ2\n7ul65Pnaa2b9XW+89lrzSGoh3THgaGAh6c4EJ0XEnHbSRyluWEajtleVPBop51GON2/evM1ldFSj\nOkHb16acpry/UfpaKrR9K/3N94s50RMnTmTWrFk9XQ0zs6aRNL+n61Dma6+Z9Xe98dprTXUwMDci\nngaQdAPpdn41G9EAgwb9dWDv4MGD293XauPGjYW43KAdMmRIIW7UkNyyZUubMrbbbru6ea5evboQ\nb9q0qU0e9epQqx61nmve0KHFu6S2tLS0SbNhw4ZCPGzYsLr7y/Wu0lAv51FDpb95D+c2MzMzMzOD\n8RTvV78w27aVpDMlzZLkb5EHsH7RE21mZmZmZtZsEXEpcCm0Hc5tA4cb0WZmZmZmZrAI2CMXT8i2\ntSs/nLrCUOGGysO9y0PEy2oNiy4P3y7n0dE50VXW0Bo3blzdepWfV3l4N8CaNWsKcaPh2+XnUR5S\nXmuIeXmoe7leVXk4t5mZmZmZWVpIbB9JkyQNAaYC03u4TtYLDeie6Inn3N7U/OdNO7ap+ZuZ9VXN\nvP762mtmZp0REZsknQ3cAbQAV0TEYz1cLeuFBnQj2szMzMzMrFVEzABm9HQ9rHdzI9rMzMzMzKwX\naDSXuDw/udbc4pEjRxbi8lziKnOcGynPsz7wwAML8apVq+qmX7JkSZs8ly5dWogbzd1udFut8tzw\nWnmWX4tGt/vaWnalVGZmZmZmZmbmRrSZmZmZmZlZVW5Em5mZmZmZmVXkRrSZmZmZmZlZRV5YzMxs\nAJB0DPBt0i07LouIae2k+wBwM/CmiJjVjVU0MzPrcyRtfVxePKvWIlWNFvXasmVLh9Jv2LChzbZR\no0bVPWbx4sV191cxduzYQjx8+PC66efPn1+IywuPQdvnXl4ErLxQWK3n3qhO5YXaymlWrFhRN89W\n7ok2M+vnJLUAlwDvAfYDTpK0X410o4BPAQ92bw3NzMzM+g43os3M+r+DgbkR8XREbABuAKbUSPcV\n4CJgXXdWzszMzKwvcSPazKz/Gw8syMULs21bSXoDsEdE3N6dFTMzMzPrazwn2sxsgJM0CPgWcHqF\ntGcCZwLsueeeza2YmZlZL1dvTnStObnleb/r168vxOU5u43UmjNdLmOXXXbpUJ477rhjIT700EPb\npFmyZEndPF588cVCvHz58rpxFY3mh5e9/PLLbbbtsMMOhbhcz6qa0hMt6RhJT0qaK+mcGvs/K2mO\npEcl/VrSXrl9p0l6Kvs5rRn1MzMbYBYBe+TiCdm2VqOAA4B7JM0DDgGmS5pczigiLo2IyRExeeed\nd25ilc3MzMx6py5vRFdcwOYPwOSI+P/bu/dgu6o6wePfHzeEkETIg4iYEAhKi6AWaARGZ6LVoo2N\nBmvEJiiKDl0ZLLB1nKmRnu4SpQuJ9JSPKiiVAqbxBYWoZQqxkRGdlrKhAxjUBBkwJpAYSMgDSELe\nv/nj7GTO3ufk3nOTu8+5j++nKpXzO/vxW/cS1rnrrv1b6w00VoG9rrh2GnAVcBaNGr6rImLqULdR\nksaYJcDJETEnIsYDC4DF+w5m5vOZeUxmnpiZJwIPAPNdnVuSJKlVHTPRAy5gk5k/z8xtRfgAjVkR\ngL8A7s3MjZm5CbgXOLeGNkrSmJGZu4ErgHuAx4A7MnNZRFwdEfN72zpJkqSRpY6a6HYL2JzVz/mX\nAj/p59qZLVdgXZ4kDTZtZy0AABuxSURBVEZm3g3cXXnvswc49+3daJMkSSNdc/1xtQZ34sSJLedv\n2LBhUPdvrrmGzuqCt28vb7IxZcqUUjxv3rxS3NfXV4onTZpUiu+7776WHNW9qLdt21aKn3nmmVLc\n6f7L/RmoXrxa7zx1ausDzS+88EIprra7Uz1dnTsiLgbmAv842Guty5MkSZIkdVsdg+iBFrABICLO\nAf6ORt3djsFcK0mSJElSL9QxiO53ARuAiDgD+AaNAXTz+uj3AO+KiKnFgmLvKt6TJEmSJKnnhrwm\nOjN3R8S+BWz6gFv2LWADPJSZi2k8vj0Z+F7xnP9TmTk/MzdGxD/QGIgDXJ2Zg99ETJIkSZK6aMKE\nCaV4sHs+D5XJkyeX4j179pTiau1w1V133TVgjmot8bPPPtth6+pT3d+6WtsNsH79+iHJVcfCYgMu\nYJOZ5/Rz7S3ALXW0S5IkSZKkQ9HThcUkSZIkSRpJHERLkiRJktShWh7nliRJkqSxpLrfcvMe0vtM\nmzatFG/evLnfazrZF7qqWq9cbVfVnDlzSvENN9xQimfNmtVyzWGHlediq+2+9957S/H111/fbxsA\nZs6cWYrXrClv0vSe97ynFFf3ol6xYkUpru6xDVDdGnnVqlUDtqsdZ6IlSZIkSeqQg2hJkiRJkjrk\nIFqSJEmSpA5ZEy1JkiRJB6G57nbr1q0HPHYg06dPL8XVeubqPat7UY8b1zqc+9Of/lSKzzjjjFI8\nb968Urxw4cJSXK0tfu1rX9uSY6A66/nz55fiz3/+86W4Whvezh133FGKv/Wtb5XiV7ziFf3Gjz76\naMs9J06cWIrHjx9finfu3Dlgu8CZaEmSJEmSOuYgWpIkSZKkDjmIliRJkiSpQw6iJUmSJEnqkAuL\nSdIYEBHnAl8F+oCbMnNR5fhlwOXAHmALsDAzl3e9oZIkjRARweGHH74/3rNnT+n4pEmTWq556aWX\nSnF1ga0NGzaU4pe97GWl+MUXXxx0O3/1q1+V4h/84AelePfu3aX4mGOOKcXXXnttyz2rC3AdffTR\npfjkk08uxdUF0xYsWNBPixvWrl074DnNqguibd++veWcHTt2lOLq9/+ZZ57pKJcz0ZI0ykVEH3AD\n8G7gVOCiiDi1ctp3M/P1mXk6cB3wpS43U5IkaURwEC1Jo9+ZwJOZuSIzdwK3A+c3n5CZLzSFk4Ds\nYvskSZJGDAfRkjT6zQSebopXF++VRMTlEfEHGjPRf9OltkmS1FURcUtErIuI3zW9Ny0i7o2IJ4q/\np/ayjRreaqmJ7qD2bh7wFeANwILMvLPp2B7gt0X4VGaWd+qWJNUiM28AboiIDwJ/D1xSPSciFgIL\nAWbPnt3dBkqSNDT+Cbge+GbTe1cCP8vMRRFxZRF/ZjA3nTmz/PvpdvXLe/fuLcXPPfdcKa7W6Fbr\nlQ/G4sWL+z2+cuXKUnz22WeX4mqdNlCqBQfYtWtXKZ4xY0Yp/vjHP16Kf/SjH7Xc87rrrivF1Vru\nqhNPPLEUP/3006X4qKOOarmmWpsdEf3mOJAhn4nusPbuKeCjwHfb3OKlzDy9+OMAWpIO3Rrg+KZ4\nVvHegdwOvK/dgcy8MTPnZubc6gekJEkjQWb+C7Cx8vb5wK3F61s5wOegBPU8zt1J7d3KzPwNsLfd\nDSRJQ2oJcHJEzImI8cACoPRr6YhoXkbzPOCJLrZPkqReOzYz9y0H/QxwbLuTImJhRDwUEQ9lunzI\nWFXHILqj2rt+TCj+YT4QEQf8DVDzP+D169cfbFsladTLzN3AFcA9wGPAHZm5LCKujoh9T/xcERHL\nImIp8GnaPMotSdJYkI3RcdsRcvMTWQf7KLBGvuG4T/QJmbkmIk4C7ouI32bmH6onZeaNwI0Ac+fO\n9ddAktSPzLwbuLvy3mebXn+y642SJGn4eDYijsvMtRFxHLBuoAsys7RfcrV2ePLkyS3XVEuhtmzZ\n0m9crTXuxNe+9rVSfOaZZ5biajsvvvjifo+3c8IJJ5TiU045pRQvXbq0FL/xjW8c8J4D1UBXVWu5\nqzZt2tTyXnXf7ere3p2qYyZ6sLV3JZm5pvh7BfAL4IyhbJwkSZIkVSzm/z+FdQnQuvKVVKhjJnp/\n7R2NwfMC4IOdXFgsJb8tM3dExDHAW2lstSJJ0iE58cof13bvlYvOq+3ekqShFRG3AW8HjomI1cBV\nwCLgjoi4FFgF/FXvWqjhbsgH0Zm5OyL21d71Abfsq70DHsrMxRHxZuCHwFTgvRHx+cw8DXgt8I2I\n2EtjlnxRZi4f6jZKkiRJGpsy86IDHHpHVxuiEauWmugOau+W0HjMu3rdr4DX19EmSZIkSarL1q1b\nS3F1L2WAHTt2lOLmmmqAww4rV9sOVLP7sY99rOW9yy67rN9rqvsxP/jgg6W42u52+y2//OUvL8WP\nPPJIKb7wwgtLcXURtl/84hf9trEu7fbuPhh11ERLkiRJkjQqOYiWJEmSJKlDDqIlSZIkSerQcNwn\nWpIkSZJGlGotcbv622qN8/jx40txtUZ6IF/4whcGdT7A8uXldZurez4feeSRpbjdftcrVqwoxa96\n1atK8dve9rZSnJml+Mtf/nLLPat10+edV975orqPdPV79+yzz/abcyg5Ey1JkiRJUoccREuSJEmS\n1CEH0ZIkSZIkdciaaEmSJEkapL6+PqZMmbI/3rZtW+l4uz2eq+8Ntga6ql298kB++ctfluIZM2aU\n4pkzZ5biadOmtdzj9NNPL8Uf+tCHSvHzzz9fiteuXTtguyZOnFiKq7Xbs2fPLsWbN28uxaeddlop\nrtZIAzz33HOl+GDrph1Ed9mJV/641vuvXHTewCdJkiRJkg6Kj3NLkiRJktQhB9GSJEmSJHXIQbQk\nSZIkSR2yJlqSxoCIOBf4KtAH3JSZiyrHPw38NbAbWA/8p8xc1fWGSpI0QmQmu3bt2h/39fWVjo8f\nP77lmogoxTt27DikNlxzzTUt711wwQWleO/evaX4hz/8YSnesmVLKV69enUpri74BTB16tR+z6ku\nLLZu3bpSfNJJJ7Xc88UXXyzFq1aVfwypfh3VRcGOPfbYUlxd6A1g3Ljy8Lf5v99gOBMtSaNcRPQB\nNwDvBk4FLoqIUyun/RqYm5lvAO4ErutuKyVJkkYGZ6IlafQ7E3gyM1cARMTtwPnA/r0jMvPnTec/\nAFzc1RaOUnXuyOBuDJIk9UYtM9ERcW5EPB4RT0bElW2Oz4uIRyJid0RcUDl2SUQ8Ufy5pI72SdIY\nMxN4uileXbx3IJcCP6m1RZIkSSPUkM9ENz02+E4aP6gtiYjFmdm8W/ZTwEeB/1a5dhpwFTAXSODh\n4tpNQ91OSVKriLiYRh/8tgMcXwgsBJg9e3YXWyZJ0vCze/fu/a/b1eBWHXbYoc1hTpo0qRQvWrSo\n5ZyNGzeW4ve+972l+KijjirFr3/960txtfa4mhPgE5/4RCmu1mHPnTu3FF911VWluFq/DLB+/fqW\n9wZj06bykLHd97paA33kkUeW4pdeeqmjXHXMRO9/bDAzdwL7HhvcLzNXZuZvgL2Va/8CuDczNxYD\n53uBc2tooySNJWuA45viWcV7JRFxDvB3wPzMbLvSSWbemJlzM3PujBkzammsJEnScFZHTXS7xwbP\nOoRr2z5y6GyIJHVsCXByRMyhMXheAHyw+YSIOAP4BnBuZq5rvYWkOmvcwTp3SRopRuzq3M6GSFJn\nMnM3cAVwD/AYcEdmLouIqyNifnHaPwKTge9FxNKIWNyj5kqSJA1rdcxEd/TYYD/Xvr1y7S+GpFWS\nNIZl5t3A3ZX3Ptv0+pyuN0qSpBFs7969pRra6h7Q7Wpy9+zZ0+85hx9+eCmu1vB2UrN72223leLl\ny5eX4o985COl+De/+U0pfvTRR/u9H8DXv/71Unz22WeX4le/+tWleNq0aaX4zW9+c8s9V65cWYqr\ne00//fTTpbhaq13dA7rd97+5hr3dNZ2qYyZ6/2ODETGexmODnc5o3AO8KyKmRsRU4F3Fe5IkSZIk\n9dyQD6I7eWwwIt4cEauBDwDfiIhlxbUbgX+gMRBfAlxdvCdJkiRJUs/V8Th3J48NLqHxqHa7a28B\nbqmjXZIkSZIkHYpaBtGSJEmSNJoddthhTJgwYX9crXceP358yzXVPZgzs9+4ev706dNL8YYNG1py\nVOt+ly5dWopfeOGFUlytHZ41qzzX2e7ruPjii1vea7Z58+ZS/Ja3vKUUt9sT+o9//GMpHmjf7a1b\nt5bi6v7X1X2jAfr6+krxlClTSvGLL77Yb859Ruzq3JIkSZIkdZuDaEmSJEmSOuQgWpIkSZKkDlkT\nLUmSJEmDlJmlGuZq/fKOHTtarqnWTVdroAfat7hdDXTVQHtJV/dfnjx5cimu1lS3qy1evLi8g/H8\n+fNL8Ze//OVSvHPnzlJc3f8aWmuvq+2ofj+re2pXc1Trn6H1+1/de7pTzkRLkiRJktQhZ6IlSZKG\nqROv/HGt91+56Lxa7y9Jo5Ez0ZIkSZLGhIg4PiJ+HhHLI2JZRHyyeH9aRNwbEU8Uf0/tdVs1fDmI\nliRJkjRW7Ab+a2aeCpwNXB4RpwJXAj/LzJOBnxWx1JaPc0uSJEkaEzJzLbC2eP1iRDwGzATOB95e\nnHYr8AvgMwPca8BFvAarujhWHVatWlWKJ0yYUIqXLVtWit/3vvcNeM/bbrutFC9ZsqQUVxcN27Zt\nW8s9XvnKV5bi5cuX95tz4sSJpTgiSvH27dv7vf5QOBMtSZIkacyJiBOBM4AHgWOLATbAM8CxPWqW\nRgBnoiVJkiSNKRExGfg+8KnMfKF5FjMzMyLyANctBBZ2p5UarpyJliRJkjRmRMThNAbQ38nMHxRv\nPxsRxxXHjwPWtbs2M2/MzLmZObc7rdVw5Ey0JI0BEXEu8FWgD7gpMxdVjs8DvgK8AViQmXd2v5WS\nJNUrGlPONwOPZeaXmg4tBi4BFhV//6iDe3HEEUfsj8eNKw+tdu/e3XJN9ZwtW7Z03Pa6DFQ7/P73\nv7/lvWr98Zo1a0pxX19fKd68efOA7fj9739fijPbPgxwQIcdNvj54Wo79+zZ01muQWeSJI0oEdEH\n3AC8GzgVuKhYibTZU8BHge92t3WSJHXVW4EPA38eEUuLP39JY/D8zoh4AjiniKW2apmJ7mDG4wjg\nm8CbgA3AhZm5sijufwx4vDj1gcy8rI42StIYcibwZGauAIiI22msQrp/2cvMXFkc29uLBkqS1A2Z\neT8QBzj8jm62RSPXkA+im2Y83gmsBpZExOLMbF6j/FJgU2a+OiIWAF8ELiyO/SEzTx/qdkmjyYlX\n/ri2e69cdF5t91bPzASebopXA2f1qC0aheyTJEljSR0z0QPOeBTx54rXdwLXR/XBeknSsNO8Kuns\n2bN73BpJknonIko1tUcddVTpeLua6GnTppXiTZs2leLmGmto3cO5Wlu8a9euAXNU63xf97rXtVzT\n7LTTTivFr3jFK1rOOeecc0px9euoeuKJJwY8v1ovXq1xrn4vqsfbfS8GUt2/utN9v+sYRHcy47H/\nnMzcHRHPA9OLY3Mi4tfAC8DfZ+Yv2yXxB7nBcZZAGtPWAMc3xbOK9wYtM28EbgSYO3fu4Fb8kCRJ\nGgWG28Jia4HZmXkG8GnguxFxVLsTm5eXnzFjRlcbKUkjzBLg5IiYExHjgQU0ViGVJEnSINUxiO5k\nxmP/ORExDjga2JCZOzJzA0BmPgz8AfizGtooSWNGZu4GrgDuobF44x2ZuSwiro6I+QAR8eaIWA18\nAPhGRCzrXYslSZKGrzoe594/40FjsLwA+GDlnH37sP0rcAFwX2ZmRMwANmbmnog4CTgZWFFDGyVp\nTMnMu4G7K+99tun1Ehq/9JQkSQehWntcreEFmDJlSik+5phj+j3eC9V651NOOaXlnPvvv78Uf/vb\n3+73eLXWuFqLDK37QleXzKrWmO/dW95QpJOa6GreTveFrhryQXRR47xvxqMPuGXfjAfwUGYuprHB\n+bci4klgI42BNsA84OqI2AXsBS7LzI1D3UZJkiRJkg5GLftEdzDjsZ3GI4PV674PfL+ONkmSNBa4\nkKQkSfUabguLSZIkSZI0bNUyEy1JkiRJo9nevXvZtm3b/njHjh2l49V9jAG2b99eiqt1vCeccEIp\nru7RXN1LuQ4nnXRSKX744Ydbzrn22mtL8eOPP16KB9pvuV29eLUmeufOnf3eo1ozPdC+0tD6/a7W\nVXfKmWhJkiRJkjrkIFqSJEmSpA75OLckSZJ6zkXxJI0UDqJVGz8MRxf/e0qSJJX19fXtf13dx7id\ndevW9Xt806ZNh9ymqtNPP70Uz5o1q9/z77rrrlJcrdOG1q918+bN/d5z+vTp/R4H2Lp1aymu1jxX\nVfd4rtZUt6t3rtZNWxMtSZIkSVLNnImWJEkjjk/H1MvvryQdmDPRkiRJkiR1yEG0JEmSJEkd8nFu\nSZIkSToI1cWthqOlS5eW4qeeeqoUb9y4sRTff//9pfjyyy9vuefDDz/cb84JEyaU4p07dw7Yzu3b\nt5ficePKQ9XmRdxg4EXCqguNQeuCaAMtXnYgDqI1qljDJUmSJKlOPs4tSZIkSVKHHERLkiRJktSh\n2h7njohzga8CfcBNmbmocvwI4JvAm4ANwIWZubI49rfApcAe4G8y85662ilJY8Gh9MmSJKm95rrb\n8ePHl47t2rWr3/N7Zdu2baW4Wmu8efPmUnzNNdcMOseOHTtKcfV7U61NBjjiiCNKcbXevJOa5/6u\nh9Y66oP971HLIDoi+oAbgHcCq4ElEbE4M5c3nXYpsCkzXx0RC4AvAhdGxKnAAuA04JXA/46IP8vM\n4V+1L2nEq7OuHnpTW38ofXLXGytJkjTM1TUTfSbwZGauAIiI24HzgeYf2M4HPle8vhO4PhrLo50P\n3J6ZO4A/RsSTxf3+taa2SofExcw0Ahx0n5zD4VfmkiRJw0hdg+iZwNNN8WrgrAOdk5m7I+J5YHrx\n/gOVa2fW1E5Jw9honBXukUPpk5/rSgslSZJGiKhjkiEiLgDOzcy/LuIPA2dl5hVN5/yuOGd1Ef+B\nxg91nwMeyMxvF+/fDPwkM++s5FgILCzC1wCPD/kX0uoYuv8DpTlHV85e5TXnyM95QmbOOJgLD6VP\nzsznKvey7x1dOXuV15zmHCk5D7rv1egXEeuBVfSu/x4s2zmwjv6fr2smeg1wfFM8q3iv3TmrI2Ic\ncDSNxWw6uZbMvBG4cQjbPKCIeCgz55rTnCMtrzlHV86DcCh9col97+jK2au85jTnSMwpVe0bbI2U\nf4+2c+jUtcXVEuDkiJgTEeNpLBS2uHLOYuCS4vUFwH1F7d1iYEFEHBERc4CTgX+rqZ2SNBYcSp8s\nSZKkJrXMRBf1dFcA99DYTuWWzFwWEVcDD2XmYuBm4FvFwmEbafxQR3HeHTQWvNkNXO7K3JJ08A6l\nT5YkSVJZbftEZ+bdwN2V9z7b9Ho78IEDXHsNMPgNyerX1UcYzTkqc/YqrzlHV85BO5Q+eRgYK/9d\n7ZPMac7hnVM6kJHy79F2DpFaFhaTJEmSJGk0qqsmWpIkSZKkUcdBdAci4tyIeDwinoyIK7uU85aI\nWFdsO9MVEXF8RPw8IpZHxLKI+GQXck6IiH+LiEeLnJ+vO2dT7r6I+HVE3NWlfCsj4rcRsTQiHupS\nzikRcWdE/D4iHouIf1dzvtcUX9++Py9ExKfqzFnk/S/Fv5/fRcRtETGh7pxF3k8WOZd14+sci7rd\n/9r31m8s9L1FXvvf+nLa92rY6MU4oRPtPs8iYlpE3BsRTxR/T+1xG9t+/g23drbj49wDiIg+4P8C\n7wRW01jl9qLMXF5z3nnAFuCbmfm6OnM15TwOOC4zH4mIlwEPA++r82uNiAAmZeaWiDgcuB/4ZGY+\nUFfOptyfBuYCR2Xme7qQbyUwt7rvbs05bwV+mZk3FasyT8zMzV3K3Udj26SzMnNVjXlm0vh3c2pm\nvlQsTHh3Zv5TXTmLvK8DbgfOBHYC/wxclplP1pl3LOlF/2vfa987hHntf+vJad+rYaNX44ROtPs8\ni4jrgI2ZuagY8E/NzM/0sI1tP/+Ajw6ndrbjTPTAzgSezMwVmbmTRsd9ft1JM/NfaKyQ2zWZuTYz\nHylevwg8BsysOWdm5pYiPLz4U/tvdiJiFnAecFPduXolIo4G5tFYdZnM3NmtH+AK7wD+UOcPcE3G\nAUdGY3/jicCfupDztcCDmbktM3cD/wf4j13IO5Z0vf+1763XWOh7wf635nz2vRpOejJO6MQBPs/O\nB24tXt9KY8DaM/18/g2rdrbjIHpgM4Gnm+LV1PzDzXAQEScCZwAPdiFXX0QsBdYB92Zm7TmBrwD/\nHdjbhVz7JPDTiHg4IhZ2Id8cYD3wv4pHJ2+KiEldyLvPAuC2upNk5hrgfwJPAWuB5zPzp3XnBX4H\n/IeImB4RE4G/BI7vQt6xZMz1v/a9teh23wv2v3Wy79VwMtI+p47NzLXF62eAY3vZmGaVz79h2859\nHESrRURMBr4PfCozX6g7X2buyczTgVnAmcWjWrWJiPcA6zLz4TrztPHvM/ONwLuBy4vHbOo0Dngj\n8LXMPAPYCnSrpn88MB/4XhdyTaXxG8s5wCuBSRFxcd15M/Mx4IvAT2k8TrgUcE97HTT73tp0u+8F\n+9/a2PdKQyMbNb3Doq63v8+/4dTOZg6iB7aG8m84ZxXvjUpFbdz3ge9k5g+6mbt41O3nwLk1p3or\nML+ok7sd+POI+HbNOff9xp7MXAf8kMYjQHVaDaxuml26k8YPdd3wbuCRzHy2C7nOAf6Ymeszcxfw\nA+AtXchLZt6cmW/KzHnAJhp1URo6Y6b/te+tTw/6XrD/rZV9r4aRkfY59WxRh7yvHnldj9tzoM+/\nYdfOKgfRA1sCnBwRc4rf7i4AFve4TbUoFpq5GXgsM7/UpZwzImJK8fpIGgsz/L7OnJn5t5k5KzNP\npPHf877MrPU35xExqVgwgeKRvnfReCStNpn5DPB0RLymeOsdQLcWuriILjxKWHgKODsiJhb/ht9B\no6amdhHx8uLv2TRq8r7bjbxjyJjof+1769OLvhfsf+tOat+rYWSkfU4tBi4pXl8C/KiHbenv829Y\ntbOdcb1uwHCXmbsj4grgHqAPuCUzl9WdNyJuA94OHBMRq4GrMvPmmtO+Ffgw8NuiTg7gf2Tm3TXm\nPA64tVjd8DDgjszsyrYnXXYs8MNGX8E44LuZ+c9dyPsJ4DtFx74C+FjdCYsfVN8J/Oe6cwFk5oMR\ncSfwCLAb+DVwYzdyA9+PiOnALuDyLi8cNOr1ov+17x11etX3gv1vnex7NSz0apzQiXafZ8Ai4I6I\nuBRYBfxV71oIHODzj+HXzhZucSVJkiRJUod8nFuSJEmSpA45iJYkSZIkqUMOoiVJkiRJ6pCDaEmS\nJEmSOuQgWpIkSZKkDjmIliRJkiSpQw6iJUmSJEnqkINoSZIkSZI69P8AhkBqd4g7dcEAAAAASUVO\nRK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f43fd862290>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "tf.reset_default_graph()\n",
    "dropout_rate=0.3\n",
    "\n",
    "x_data = tf.placeholder(tf.float32, 784)\n",
    "dropout_rate_data = tf.placeholder(tf.float32)\n",
    "\n",
    "# uncertainty (sigma) is per logit\n",
    "logits, props, uncertainty = mnist_model.combined_cnn_mnist_model(x_data, dropout_rate_data)\n",
    "\n",
    "init = tf.global_variables_initializer()\n",
    "sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))\n",
    "sess.run(init)\n",
    "\n",
    "variable_list = tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, scope=\"mnist\")[:10]\n",
    "saver = tf.train.Saver(var_list=variable_list)\n",
    "saver.restore(sess, \"mnist_combined.ckpt\")\n",
    "\n",
    "def combined_inference(img):\n",
    "    uncertainties = []\n",
    "    ys = []\n",
    "    for i in range(50):\n",
    "        ys.append(sess.run(props, feed_dict={x_data: img, dropout_rate_data: 0.5})[0])\n",
    "        uncertainties.append(sess.run(tf.square(uncertainty), feed_dict={x_data: img,\n",
    "                                                                         dropout_rate_data: 0.5})[0])\n",
    "\n",
    "    fig, axs = plt.subplots(2, 3, figsize=[15, 5])\n",
    "    fig.suptitle(\"Adversarial Attack in Combined Network\", fontsize=16)\n",
    "    axs[0, 0].bar(ticks, np.array(ys).var(axis=0))\n",
    "    axs[0, 0].set_title(\"Var\")\n",
    "    axs[0, 1].bar(ticks, np.array(ys).mean(axis=0))\n",
    "    axs[0, 1].set_title(\"Mean\")\n",
    "    axs[0, 2].imshow(img.reshape(28, 28), cmap=\"gray\")\n",
    "    \n",
    "#    fig, axs = plt.subplots(1, 3, figsize=[15, 5])\n",
    "    axs[1, 0].bar(ticks, np.array(uncertainties).var(axis=0))\n",
    "    axs[1, 0].set_title(\"Uncertainty Variance\")\n",
    "    axs[1, 1].bar(ticks, np.array(uncertainties).mean(axis=0))\n",
    "    axs[1, 1].set_title(\"Uncertainty Mean\")\n",
    "    axs[1, 2].imshow(img.reshape(28, 28), cmap=\"gray\")\n",
    "    fig.tight_layout(rect=[0, 0.03, 1, 0.95])\n",
    "    \n",
    "combined_inference(adv_img)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "ros_e2e",
   "language": "python",
   "name": "ros_e2e"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
